home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Mac Mania 5
/
MacMania 5.toast
/
/
Internet software
/
NewsWatcher
/
NW Source
/
Source
/
cancel.c
< prev
next >
Wrap
Text File
|
1997-01-09
|
3KB
|
121 lines
/*----------------------------------------------------------------------------
cancel.c
This module handles canceling articles.
Copyright © 1994-1997, Northwestern University.
----------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#include "glob.h"
#include "cancel.h"
#include "dialog.h"
#include "header.h"
#include "strutil.h"
#include "news.h"
#include "status.h"
#include "memutil.h"
#include "ic.h"
/*----------------------------------------------------------------------------
CancelArticle
Cancel an article.
Entry: idStr = message id, C-format.
groups = handle to list of group names.
statusMsg = status message, C-format.
Exit: function result = error code.
----------------------------------------------------------------------------*/
OSErr CancelArticle (char *idStr, Handle groups, char *cancelMsg)
{
Handle msg = nil;
char cancelStr[263];
Handle cancelHandle = nil;
Handle extraNews = nil;
OSErr err = noErr;
Boolean postIndeterminate;
MyICReadSharedPrefs(kICNewsHeaders);
sprintf(cancelStr, "cancel %s", idStr);
err = MyPtrToHand(cancelStr, &cancelHandle, strlen(cancelStr));
if (err != noErr) goto exit;
err = MyPtrToHand(gPrefs.extraNewsHdrLines, &extraNews,
strlen(gPrefs.extraNewsHdrLines));
if (err != noErr) goto exit;
err = MakeNewsHeader(groups, cancelHandle, nil, nil, nil, nil, extraNews,
cancelHandle, nil, &msg);
if (err != noErr) goto exit;
MyDisposeHandle(cancelHandle);
cancelHandle = nil;
MyDisposeHandle(extraNews);
extraNews = nil;
err = MyPtrAndHand(cancelStr, msg, strlen(cancelStr));
if (err != noErr) goto exit;
/* Post the control message to cancel the article. */
err = PostArticle(msg, cancelMsg, &postIndeterminate);
if (err != noErr) goto exit;
MyDisposeHandle(msg);
return noErr;
exit:
MyDisposeHandle(cancelHandle);
MyDisposeHandle(extraNews);
MyDisposeHandle(msg);
return err;
}
/*----------------------------------------------------------------------------
UserIsPoster
Check to see if the user is the poster of an article.
Entry: text = pointer to full article text or article header text.
Exit: function result = true if user is poster.
----------------------------------------------------------------------------*/
Boolean UserIsPoster (Handle text)
{
char fromStr[514], fromStrAlternate[514], authorStr[514];
Boolean valid = false;
MyICReadSharedPrefs(kICRealName);
MyICReadSharedPrefs(kICEmail);
if (*gPrefs.fullName == 0) {
strcpy(fromStr, gPrefs.emailAddress);
sprintf(fromStrAlternate, "%s ()", gPrefs.emailAddress);
} else {
sprintf(fromStr, "%s (%s)", gPrefs.emailAddress, gPrefs.fullName);
}
if (FindHeaderCString(text, "Sender", authorStr, sizeof(authorStr))) {
valid = MyStrEqual(fromStr, authorStr);
if (!valid && *gPrefs.fullName == 0)
valid = MyStrEqual(fromStrAlternate, authorStr);
}
if (!valid) {
if (FindHeaderCString(text, "From", authorStr, sizeof(authorStr))) {
valid = MyStrEqual(fromStr, authorStr);
if (!valid && *gPrefs.fullName == 0)
valid = MyStrEqual(fromStrAlternate, authorStr);
}
}
return valid;
}